<?php
namespace cms\modules\v1\models\shop;

use cms\modules\v1\models\Common;
use common\models\Functions;
use common\models\pay\Alipay;
use common\models\shop\GoodsOrder;
use common\models\Status;
use common\models\userFund\UserMoneyLog;
use Yii;
use yii\base\Exception;

/**
 * Class UserActiveRecord
 * @package cms\modules\v1\models
 */
class GoodsOrderReturn extends \common\models\shop\GoodsOrderReturn
{

    /**
     * 获取退款信息
     * @param int $id
     * @return array
     */
    public function getInfo($id = 0) {
        try {
            if (empty($id)) {
                throw new Exception('未知信息');
            }
            $info = static::getOneByWhere(['order_id'=>$id]);
            if (empty($info)) {
                throw new Exception('请求失败');
            }
            $info['images'] = \common\models\Common::getImages($info['images']);
            return Functions::formatRestAPI(0, '', $info);
        } catch (Exception $e) {
            return Functions::formatRestAPI(1, $e->getMessage());
        }
    }

    /**
     * 同意或驳回申请
     * @param int $id
     * @return array
     */
    public function addEdit() {
        $trans = \Yii::$app->db->beginTransaction();
        try {
            $status = Yii::$app->request->post('type','0');
            $orderId = Yii::$app->request->post('id','0');
            $return_money = Yii::$app->request->post('return_money','0');
            $reject = Yii::$app->request->post('reject');
            if(!$status){
                throw new Exception('未知状态');
            }
            if (empty($orderId)) {
                throw new Exception('未知信息');
            }
            $returnInfo = static::getOneByWhere(['order_id'=>$orderId]);
            if (!$returnInfo) {
                throw new Exception('数据不存在');
            }

            if (!in_array($status,[Status::USER_GOODS_ORDER_RETURNOK,Status::USER_GOODS_ORDER_RETURNNO])) {
                throw new Exception('退款参数不合法');
            }
            if ($status == Status::USER_GOODS_ORDER_RETURNNO){//驳回退款
                //更新状态
                if(empty($reject)){
                    throw new Exception('填写驳回理由');
                }
            }

            // 执行退款
            (new GoodsOrder())->confirmReturnOrder($orderId,$status,$reject ? $reject : "系统同意退款");

//            if($status == Status::USER_GOODS_ORDER_RETURNOK){ //同意退款
//                //更新退款表
//                $returnData['reject_time'] = date('Y-m-d H:i:s');
//                $returnData['status'] = Status::USER_GOODS_ORDER_RETURNOK;
//                $orderReturn = static::updateData($returnData,['order_id'=>$orderId]);
//                if($orderReturn == false){
//                    throw new Exception('退款状态更新失败');
//                }
//                //更新订单表
//                $OrderData['finished_time'] = date('Y-m-d H:i:s');
//                $OrderData['status'] = Status::USER_GOODS_ORDER_RETURNOK;
//                $order = GoodsOrder::updateData($OrderData,['id'=>$orderId]);
//                if($order == false){
//                    throw new Exception('订单状态更新失败');
//                }
//
//                $orderInfo = GoodsOrder::getOneByWhere(['id' => $orderId]);
//                if ($orderInfo['pay_way'] == Status::PAY_WAY_ALIPAY) {
//                    $alipayRes = (new Alipay())->refundGoods($orderInfo['order_number']);
//                    if (!$alipayRes) {
//                        throw new Exception('支付宝退款失败');
//                    }
//                } else {
//                    // 商品退款，增加用户的余额或者原路退款
//                    UserMoneyLog::record(
//                        $returnInfo['user_id'],
//                        Status::PROP_TYPE_MONEY,
//                        Status::MONEY_LOG_TYPE_BUT_GOODS_RETURN,
//                        1 * $return_money,
//                        Status::MONEY_LOG_TYPE_MAP[Status::MONEY_LOG_TYPE_BUT_GOODS_RETURN] ?? '',
//                        "同意退款，退款单号:{$returnInfo['order_number']}，退回金额：{$return_money}，退款时间：{$OrderData['finished_time']}。"
//                    );
//                }
//
//
//                if(!empty($orderInfo['sell_user'])){
//                    // 给卖家减少橱窗余额
//                    UserMoneyLog::record(
//                        $orderInfo['sell_user'],
//                        Status::PROP_TYPE_SHOP_MONEY,
//                        Status::SHOP_MONEY_LOG_TYPE_GOODS_REFUND,
//                        -1 * abs($orderInfo['real_money']),
//                        Status::SHOP_MONEY_LOG_TYPE_MAP[Status::SHOP_MONEY_LOG_TYPE_GOODS_REFUND] ?? '',
//                        $reason
//                    );
//                }
//
//
//                $msg = '退款成功';
//
//            }elseif ($status == Status::USER_GOODS_ORDER_RETURNNO){//驳回退款
//                //更新状态
//                if(empty($reject)){
//                    throw new Exception('填写驳回理由');
//                }
//                $returnData['reject'] = $reject;
//                $returnData['reject_time'] = date('Y-m-d H:i:s');
//                $returnData['status'] = Status::USER_GOODS_ORDER_RETURNNO;
//                //更新退款表
//                $orderReturn = static::updateData($returnData,['order_id'=>$orderId]);
//                if(!$orderReturn){
//                    throw new Exception('退款状态更新失败');
//                }
//                //更新订单表
//                $order = GoodsOrder::updateData(['status'=>Status::USER_GOODS_ORDER_RETURNNO],['id'=>$orderId]);
//                if(!$order){
//                    throw new Exception('订单状态更新失败');
//                }
//                $msg = '驳回成功';
//
//            }else{
//                throw new Exception('参数异常');
//            }
            $trans->commit();
            return Functions::formatRestAPI(0, "操作成功");
        } catch (Exception $e) {
            $trans->rollBack();
            return Functions::formatRestAPI(1, $e->getMessage());
        }
    }

}
